/*
 * Ext JS Library 2.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */

MainPanel = function(config) {

	this.preview = new Ext.Panel( {
		id :'preview',
		region :'south',
		cls :'preview',
		autoScroll :true,
		listeners :FeedViewer.LinkInterceptor,
		tbar : [ {
			id :'tab',
			text :'Ver em uma nova aba',
			iconCls :'new-tab',
			disabled :true,
			handler :this.openTab,
			scope :this
		}, '-', {
			id :'win',
			text :'Go to Post',
			iconCls :'new-win',
			disabled :true,
			scope :this,
			handler : function() {
				window.open(this.gsm.getSelected().data.link);
			}
		} ],

		clear : function() {
			//this.body.update('');
			var items = this.topToolbar.items;
			//items.get('tab1').disable();
			//items.get('win1').disable();
		}
	});

	this.grid = new FeedGrid(this, {
		tbar : [ {
			text :'Open All',
			tooltip : {
				title :'Open All',
				text :'Opens all item in tabs'
			},
			iconCls :'tabs',
			handler :this.openAll,
			scope :this
		}, '-', {
			split :true,
			text :'Reading Pane',
			tooltip : {
				title :'Reading Pane',
				text :'Show, move or hide the Reading Pane'
			},
			iconCls :'preview-bottom',
			handler :this.movePreview.createDelegate(this, []),
			menu : {
				id :'reading-menu',
				cls :'reading-menu',
				width :100,
				items : [ {
					text :'Bottom',
					checked :true,
					group :'rp-group',
					checkHandler :this.movePreview,
					scope :this,
					iconCls :'preview-bottom'
				}, {
					text :'Right',
					checked :false,
					group :'rp-group',
					checkHandler :this.movePreview,
					scope :this,
					iconCls :'preview-right'
				}, {
					text :'Hide',
					checked :false,
					group :'rp-group',
					checkHandler :this.movePreview,
					scope :this,
					iconCls :'preview-hide'
				} ]
			}
		}, '-', {
			pressed :true,
			enableToggle :true,
			text :'Summary',
			tooltip : {
				title :'Post Summary',
				text :'View a short summary of each item in the list'
			},
			iconCls :'summary',
			scope :this,
			toggleHandler : function(btn, pressed) {
				this.grid.togglePreview(pressed);
			}
		} ]
	});

	MainPanel.superclass.constructor.call(this, Ext.apply({
		id :'main-tabs',
		activeTab :0,
		region :'center',
		margins :'0 5 5 0',
		resizeTabs :true,
		tabWidth :150,
		minTabWidth :120,
		enableTabScroll :true,
		plugins :new Ext.ux.TabCloseMenu(),
		items : {
			id :'main-view',
			layout :'border',
			title :'Loadiiing...',
			hideMode :'offsets',
			items : [ this.grid, {
				id :'bottom-preview',
				layout :'fit',
				items :this.preview,
				height :250,
				split :true,
				border :false,
				region :'south'
			}, {
				id :'right-preview',
				layout :'fit',
				border :false,
				region :'east',
				width :350,
				split :true,
				hidden :true
			} ]
		}
	},config));

	this.gsm = this.grid.getSelectionModel();

	this.gsm.on('rowselect', function(sm, index, record) {
		FeedViewer.getTemplate().overwrite(this.preview.body, record.data);
		var items = this.preview.topToolbar.items;
		items.get('tab').enable();
		items.get('win').enable();
	}, this, {
		buffer :250
	});

	this.grid.store.on('beforeload', this.preview.clear, this.preview);
	this.grid.store.on('load', this.gsm.selectFirstRow, this.gsm);

	this.grid.on('rowdblclick', this.openTab, this);
};

Ext.extend(MainPanel, Ext.TabPanel, {

	loadFeed : function(feed) {
	// verifica se ja existe alguma tab com o nome selecionado
	/*
	 * tab = new Ext.Panel({ cls:'preview single-preview', title: feed.text,
	 * tabTip: feed.title, closable:true, listeners: FeedViewer.LinkInterceptor,
	 * autoScroll:true, layout:"border", items:[ this.grid, { layout:'fit',
	 * items:this.preview, height: 250, split: true, border:false,
	 * region:'south' }] });
	 */
	// this.add(tab);
	// this.setActiveTab(tab);
	// this.doLayout();
       this.grid.loadFeed(feed.attributes.url);
       Ext.getCmp('main-view').setTitle(feed.attributes.text);
},
movePreview : function(m, pressed) {
	if (!m) { // cycle if not a menu item click
		var readMenu = Ext.menu.MenuMgr.get('reading-menu');
		readMenu.render();
		var items = readMenu.items.items;
		var b = items[0], r = items[1], h = items[2];
		if (b.checked) {
			r.setChecked(true);
		} else if (r.checked) {
			h.setChecked(true);
		} else if (h.checked) {
			b.setChecked(true);
		}
		return;
	}
	if (pressed) {
		var preview = this.preview;
		var right = Ext.getCmp('right-preview');
		var bot = Ext.getCmp('bottom-preview');
		var btn = this.grid.getTopToolbar().items.get(2);
		switch (m.text) {
		case 'Bottom':
			right.hide();
			bot.add(preview);
			bot.show();
			bot.ownerCt.doLayout();
			btn.setIconClass('preview-bottom');
			break;
		case 'Right':
			bot.hide();
			right.add(preview);
			right.show();
			right.ownerCt.doLayout();
			btn.setIconClass('preview-right');
			break;
		case 'Hide':
			preview.ownerCt.hide();
			preview.ownerCt.ownerCt.doLayout();
			btn.setIconClass('preview-hide');
			break;
		}
	}
},
openTab : function(record) {
	record = (record && record.data) ? record : this.gsm.getSelected();
	var d = record.data;
	var id = !d.link ? Ext.id() : d.link.replace(/[^A-Z0-9-_]/gi, '');
	var tab;
	if (!(tab = this.getItem(id))) {
		tab = new Ext.Panel( {
			id :id,
			cls :'preview single-preview',
			title :d.title,
			tabTip :d.title,
			html :FeedViewer.getTemplate().apply(d),
			closable :true,
			listeners :FeedViewer.LinkInterceptor,
			autoScroll :true,
			border :true,
			tbar : [ {
				text :'Go to Post',
				iconCls :'new-win',
				handler : function() {
					window.open(d.link);
				}
			} ]
		});
		this.add(tab);
	}
	this.setActiveTab(tab);
},

openAll : function() {
	this.beginUpdate();
	this.grid.store.data.each(this.openTab, this);
	this.endUpdate();
}
});